home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / ddj0897.zip / DYN401.ZIP / class / double.d < prev    next >
Text File  |  1996-06-26  |  2KB  |  165 lines

  1.  
  2. /*
  3.  *
  4.  *    Copyright (c) 1993-1996 Algorithms Corporation
  5.  *    3020 Liberty Hills Drive
  6.  *    Franklin, TN  37067
  7.  *
  8.  *    ALL RIGHTS RESERVED.
  9.  *
  10.  *
  11.  *
  12.  */
  13.  
  14.  
  15. #include <math.h>
  16.  
  17.  
  18.  
  19. defclass  DoubleFloat : Number  {
  20.     double    iVal;
  21. };
  22.  
  23.  
  24.  
  25. cmeth    gNewWithDouble, <vNew> (double val)
  26. {
  27.     object    obj = gNew(super);
  28.     ivType    *iv = ivPtr(obj);
  29.     iVal = val;
  30.     return(obj);
  31. }
  32.  
  33. imeth    gStringRepValue()
  34. {
  35.     return vSprintf(String, "%f", iVal);
  36. }
  37.  
  38. imeth    char    gCharValue()
  39. {
  40.     return (char) iVal;
  41. }
  42.  
  43. imeth    short    gShortValue()
  44. {
  45.     return (short) iVal;
  46. }
  47.  
  48. imeth    unsigned short    gUnsignedShortValue()
  49. {
  50.     return (unsigned short) iVal;
  51. }
  52.  
  53. imeth    long    gLongValue()
  54. {
  55.     return (long) iVal;
  56. }
  57.  
  58. imeth    double    gDoubleValue()
  59. {
  60.     return (double) iVal;
  61. }
  62.  
  63. imeth    void    *gPointerValue()
  64. {
  65.     return (void *) &iVal;
  66. }
  67.  
  68. imeth    gChangeValue(val)
  69. {
  70.     ChkArg(val, 2);
  71.     iVal = gDoubleValue(val);
  72.     return self;
  73. }
  74.  
  75. imeth    gChangeCharValue(int val)
  76. {
  77.     iVal = (double) val;
  78.     return self;
  79. }
  80.  
  81. imeth    gChangeShortValue(int val)
  82. {
  83.     iVal = (double) val;
  84.     return self;
  85. }
  86.  
  87. imeth    gChangeUShortValue(unsigned val)
  88. {
  89.     iVal = (double) val;
  90.     return self;
  91. }
  92.  
  93. imeth    gChangeLongValue(long val)
  94. {
  95.     iVal = (double) val;
  96.     return self;
  97. }
  98.  
  99. imeth    gChangeDoubleValue(double val)
  100. {
  101.     iVal = (double) val;
  102.     return self;
  103. }
  104.  
  105. imeth    gRound(int p)    /*  round n to p places     */
  106. {
  107.     double    r;
  108.  
  109.     r = pow(10.0, (double) p);
  110.     if (iVal < 0.0)
  111.         iVal = -(floor(.5 + -iVal * r) / r);
  112.     else
  113.         iVal = floor(.5 + iVal * r) / r;
  114.     return self;
  115. }
  116.  
  117. imeth    gTruncate(int p)        /* truncate n to p places  */
  118. {
  119.     double    r;
  120.  
  121.     r = pow(10.0, (double) p);
  122.     if (iVal < 0.0)
  123.         iVal = -(floor(-iVal * r) / r);
  124.     else
  125.         iVal = floor(iVal * r) / r;
  126.     return self;
  127. }
  128.  
  129. imeth    int    gHash()
  130. {
  131.     double    t;
  132.  
  133.     t = .6125423371    * iVal;
  134.     t = t < 0.0 ? -t : t;
  135.     return (int) (BIG_INT * (t - floor(t)));
  136. }
  137.  
  138. imeth    int    gCompare(obj)
  139. {
  140.     double    sv, ov;
  141.  
  142.     ChkArg(obj, 2);
  143.     if (ClassOf(obj) != CLASS)
  144.         return gCompare(super, obj);
  145.     if ((sv=iVal) < (ov=ivPtr(obj)->iVal))
  146.         return -1;
  147.     else if (sv == ov)
  148.         return 0;
  149.     else
  150.         return 1;
  151. }
  152.  
  153.  
  154. /*
  155.  *
  156.  *    Copyright (c) 1993-1996 Algorithms Corporation
  157.  *    3020 Liberty Hills Drive
  158.  *    Franklin, TN  37067
  159.  *
  160.  *    ALL RIGHTS RESERVED.
  161.  *
  162.  *
  163.  *
  164.  */
  165.